package com.yidu.service.impl;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.comment.Tools;
import com.yidu.dao.SnAuditMapper;
import com.yidu.dao.SnBranchMapper;
import com.yidu.dao.SnComInDetailMapper;
import com.yidu.dao.SnComPurDetailMapper;
import com.yidu.dao.SnComPurchaseMapper;
import com.yidu.dao.SnFiDetailMapper;
import com.yidu.dao.SnFinanceMapper;
import com.yidu.model.SnAudit;
import com.yidu.model.SnBranch;
import com.yidu.model.SnComInDetail;
import com.yidu.model.SnComInventory;
import com.yidu.model.SnComPurDetail;
import com.yidu.model.SnComPurchase;
import com.yidu.model.SnFiDetail;
import com.yidu.model.SnFinance;
import com.yidu.model.SnUser;
import com.yidu.service.SumChaseService;
/**
 * 查询采购表所有
 * @author wuqi
 *
 */
@Service
public class SumChaseServiceImpl implements SumChaseService{
	/**
	 * 注入采购表
	 */
	@Resource
	SnComPurchaseMapper scpm;
	/**
	 * 注入采购详情表
	 */
	@Resource
	SnComPurDetailMapper scpdm;
	/**
	 * 注入审核表
	 */
	@Resource
	SnAuditMapper sam;
	/**
	 * 注入财务表
	 */
	@Resource
	SnFinanceMapper sfm;
	/**
	 * 注入分公司表
	 */
	@Resource
	SnBranchMapper snbranch;
	
	/**
	 * 注入财务详情表
	 */
	@Resource
	SnFiDetailMapper sfdm;
	
	/**
	 * 注入库存详情表
	 */
	@Resource
	SnComInDetailMapper scidm;
	/**
	 * 查询采购表所有
	 */
	@Override
	public List<SnComPurchase> SelectAll(Map<String, Object> maps) {
		return scpm.SelectAll(maps);
	}

	/**
	 * 查询采购表所有行数
	 */
	@Override
	public int SelectAllCount(Map<String, Object> maps) {
		return scpm.SelectAllCount(maps);
	}

	/**
	 * 采购订单的商品库存是否充足
	 */
	@Override
	public String findByinventory(String purId,Integer auState,String auIdea,Integer purSum,String braId,SnUser user) {
		//定义变量
		String com = "";
		//通过采购id查询详情表																		fdbp
		List<SnComPurDetail> list = scpdm.findDetailBypurId(purId);
		//遍历采购详情表
		for (SnComPurDetail snComPurDetail : list) {
			//采购详情表id查询库存表
			SnComInventory sci = scpdm.findByComId(snComPurDetail.getComId());
			//判断采购详情不为空并且查询出的库存表不为空
			if(snComPurDetail != null && sci !=null) {
				//当详情表商品数量大于数据库的数量时
				if(snComPurDetail.getPdNumber()>sci.getCiNumber().intValue()) {
					//得到仓库不足的商品
					com+=sci.getComName()+" ";
				}
			}
		}
		
			//得到采购表对象
			SnComPurchase scp = new SnComPurchase();
			//采购表对象
			scp.setPurId(purId);
			if(auState==0) { //不同意
				scp.setIsva(0);
				//不同意修改分公司财务增加
				Map<String,Object> map = new HashMap<>();
				//获取分公司id
				map.put("id", braId);
				map.put("sum", purSum);
				//修改分公司财务金额(增加)
				sfm.updateById(map);
				
				//通过本公司查询本公司财务表的id
				SnFinance finid = sfm.findByFinId(braId);
				//得到财务详情表
				SnFiDetail sfd = new SnFiDetail();
				//采购详情id
				sfd.setFdId(Tools.getDateOrderNo());
				//财务id
				sfd.setFinId(finid.getFinId());
				//金额
				sfd.setFdMoney(BigDecimal.valueOf(Integer.valueOf(purSum)));
				//支出用途
				sfd.setFdExplain("采购商品仓管审核不通过增加财务金额"+purSum+"元");
				sfd.setIsva(1);
				//时间
				sfd.setOptime(Tools.getTimeStr(new Date()));
				//通过财务id增加一条财务详情表
				sfdm.insertSelective(sfd);
			}else {
				//如果采购商品没有超过库存就增加审核表，修改采购表
				if(com=="") {
					scp.setIsva(4);
				}else {
					return com;
				}	
			}
			//修改采购表状态
			int rows1 = scpm.updateByPrimaryKeySelective(scp);
			
			//得到审核对象
			SnAudit sa = new SnAudit();
			//审核id
			sa.setAuId(Tools.getDateOrderNo());
			//业务id
			sa.setAllId(purId);
			//审核时间
			sa.setOptime(Tools.getTimeStr(new Date()));
			//审核人
			sa.setOper(user.getUserName());
			//审核状态
			sa.setAuState(auState);
			//审核意见
			sa.setAuIdea(auIdea);
			//审核部门
			sa.setAuComment("仓管审核");
			//增加审核表
			int rows2 = sam.insertSelective(sa);
			//判断12大于0
			if(rows1>0 && rows2>0) {
				return "1";
			}else {
				return "0";
			}
	}

	/**
	 * 查询分公司
	 */
	@Override
	public List<SnBranch> selectAllBranch() {
		return snbranch.findAll();
	}

	/**
	 * 总公司经理审核
	 */
	@Override
	public int findByinventoryAndFinance(String purId, Integer auState, String auIdea, Integer purSum, String braId,SnUser user) {
		//得到审核对象
		SnAudit sa = new SnAudit();
		//采购id
		String mat2 = Tools.getDateOrderNo();
		//审核id
		sa.setAuId(mat2);
		//业务id
		sa.setAllId(purId);
		//审核时间
		sa.setOptime(Tools.getTimeStr(new Date()));
		//审核人
		sa.setOper(user.getUserName());
		//审核部门
		sa.setAuComment("总公司经理");
		//审核意见
		sa.setAuIdea(auIdea);
		
		if(auState==0) {   //审核不通过
			//审核状态赋值参数
			sa.setAuState(auState);
			//增加审核表
			int rows = sam.insertSelective(sa);
			//得到采购表对象
			SnComPurchase scp = new SnComPurchase();
			//采购表对象
			scp.setPurId(purId);
			//采购是否有效0
			scp.setIsva(0);
			//修改采购表状态
			int rows1 = scpm.updateByPrimaryKeySelective(scp);
			//不同意修改分公司财务增加
			Map<String,Object> map = new HashMap<>();
			//map赋值分公司id
			map.put("id", braId);
			//map sum赋值总金额
			map.put("sum", purSum);
			//修改分公司财务金额(增加)
			sfm.updateById(map);
			
			//通过本公司查询本公司财务表的id															fbf
			SnFinance finid = sfm.findByFinId(braId);
			//得到财务详情表
			SnFiDetail sfd = new SnFiDetail();
			//采购详情id
			sfd.setFdId(Tools.getDateOrderNo());
			//财务id赋值查询出的财务表id
			sfd.setFinId(finid.getFinId());
			//金额
			sfd.setFdMoney(BigDecimal.valueOf(Integer.valueOf(purSum)));
			//支出用途
			sfd.setFdExplain("总公司经理审核不通过增加财务金额"+purSum+"元");
			//是否有效赋值1
			sfd.setIsva(1);
			//时间
			sfd.setOptime(Tools.getTimeStr(new Date()));
			//通过财务id增加一条财务详情表
			int rows0 = sfdm.insertSelective(sfd);
			if(rows>0 && rows1>0 && rows0>0) {
				//审核不通过成功
				return 1;
			}else {
				//审核不通过失败
				return 2;
			}
		}else {   //审核通过
			//审核状态
			sa.setAuState(auState);
			//增加审核表
			int rows2 = sam.insertSelective(sa);
			
			
			//得到采购表对象
			SnComPurchase scp = new SnComPurchase();
			//采购表对象
			scp.setPurId(purId);
			//修改采购表状态
			scp.setIsva(5);
			//修改采购表状态
			int rows3 = scpm.updateByPrimaryKeySelective(scp);
			
			
			//同意修改总公司财务增加
			Map<String,Object> map = new HashMap<>();
			//map id赋值分公司id
			map.put("id", user.getBraId());
			//map sum赋值总金额
			map.put("sum", purSum);
			//修改总公司财务金额(增加)
			sfm.updateById(map);
			

			//通过本公司查询本公司财务表的id
			SnFinance finid = sfm.findByFinId("123");
			//得到财务详情表
			SnFiDetail sfd = new SnFiDetail();
			//采购详情id
			sfd.setFdId(Tools.getDateOrderNo());
			//财务id   总公司
			sfd.setFinId(finid.getFinId());
			//金额
			sfd.setFdMoney(BigDecimal.valueOf(Integer.valueOf(purSum)));
			//支出用途
			sfd.setFdExplain("总公司经理审核通过增加财务金额"+purSum+"元");
			//是否有效1
			sfd.setIsva(1);
			//时间
			sfd.setOptime(Tools.getTimeStr(new Date()));
			//通过财务id增加一条财务详情表
			int rows4 = sfdm.insertSelective(sfd);
			
			
			//通过采购id查询采购详情表
			List<SnComPurDetail> list = scpdm.findDetailBypurId(purId);
			//定义变量
			int rows5 = 0;
			//定义变量
			int rows8 = 0;
			//遍历采购详情表
			for (SnComPurDetail snComPurDetail : list) {
				//得到库存的对象
				SnComInventory sci = new SnComInventory();
				//得到商品数量
				sci.setCiNumber(BigDecimal.valueOf(snComPurDetail.getPdNumber()));
				//得到商品id
				sci.setComId(snComPurDetail.getComId());
				//直接定义公司id
				sci.setBraId(braId);
				//减少总公司库存数量
				rows5 = scpdm.updateSum(sci);
				//查询总公司库存的改变的商品的库存id
				SnComInventory sci3 = scpdm.findSum(sci);
				
				//得到库存详情对象
				SnComInDetail scd2 = new SnComInDetail();
				//详情表id
				scd2.setCidId(Tools.getDateOrderNo());
				//库存表id
				scd2.setCiId(sci3.getCiId());
				//库存记录说明
				scd2.setCidExplain("总公司销售商品"+sci.getComName()+"共"+snComPurDetail.getPdNumber());
				//是否有效赋值1
				scd2.setIsva(1);
				//时间
				scd2.setOptime(Tools.getTimeStr(new Date()));
				//通过商品库存id减少总公司库存详情表
				rows8 = scidm.insertSelective(scd2);
			}
			
			if(rows2>0 && rows3>0 && rows4>0 && rows5>0 && rows8>0) {
				return 1;
			}else {
				return 2;
			}
		}
	}

}
